package Thread;

//关键字synchronized用于加锁
//注意:是关键字不是方法
public class Demo19 {
    private  static int count = 0;

    private static final Object locker = new Object();
    private static final Object locker1 = new Object();

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(()->{
            for (int i = 0; i < 50000; i++) {
                synchronized (Demo19.class) {//进入代码块进行加锁
                    count++;
                //出了代码块就会解锁
                }
            }

        });
        Thread t2 = new Thread(()->{
            for (int i = 0;i < 50000; i++){
                //这里换成Demo14.class之后:类对象
                synchronized (Demo14.class) {//加锁的必须是同一个锁对象
                    count++;
                    //加锁之后,此处代码,只有count++是串行执行的,而for循环,比较,还有i++都是并发执行的
                    //锁里面的是串行的,外面的仍然能并发执行

                    /*
                    引入多线程并发,就是为了提高效率,引入锁之后
                    相当于一个线程中,小部分工作,是不得串行的,仍然有大部分工作是可以并发执行的
                    虽然不如整体都并发效率高,但是肯定比整体都串行效率高
                    */
                }
            }
        });

        t1.start();
        t2.start();
        t1.join();
        t2.join();

        System.out.println("count=" + count);
    }
}
